這邊簡單說明一下,在 AWS 的 EKS service ,裡面所需要使用的 service 都要錢才有辦法生存的狀況下,要如何使用會比較節省錢的部分,這邊分成三個部分來跟大家分享撞牆的經驗
這邊 Spot Instants 最主要的是要求開啟 Spot instants 的授權,因為 Spot 比開 on-demand 的便宜許多,其原因就是因為 spot 其實會無預警的被關掉,而 On-demand 的不會。
但是對於 Machine Learning 而言,計算資源被關掉其實可能影響不是很大,但是反過來講 online service 的話被關掉就很嚴重,可能需要重啟很多服務,所以在設計上就要確定哪些是 spot instants ,哪些要使用 On-demand 的服務
但是不是一開始就可以直接使用 Spot Instants 的,所以要加一個 service linked role ,在 terraform 如下
resource "aws_iam_service_linked_role" "spotInstants" {
aws_service_name = "spot.amazonaws.com"
}
放進 Terraform 裡面就是每次建立服務的時候都會去檢查是否有建立 service linked role
另外講到就是資料傳輸的議題,尤其是在Machine Learning 專案裡面會需要大量的傳輸資料,尤其實在訓練的時候會拉資料,但有時候 EKS 跟 Data warehouse 是放在不同的 Region, VPC, Availability Zone 都會造成大量的傳輸而產生大量的費用,所以這部分要特別小心
為了避開費用的產生,如果跨 vpc 的話,記得在 vpc 上面設定 VPC Peering 來減少資料傳輸所產生的費用
Figure 1 : VPC peering 的設置的概念
主要的解決狀況是需要特殊或者較多的資源時候,時常會因為 Service Qoutas 的限制,導致無法順利的取得資料,因此要到 AWS Service Quotas 跟 support 要求開資源服務,因為AWS 預設會限制花費比較高使用的狀況,例如 GPU。
同時也是需要在這裡設置 Node Cpu 等等的使用數量,沒記錯的話預設只能使用30 cpu 的數量,則 GPU 的數量是0,因此會常常受到取用的限制
Overview of Data Transfer Costs for Common Architectures